home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / DLLMIX.PAK / BCDLL.CPP next >
C/C++ Source or Header  |  1997-05-06  |  3KB  |  95 lines

  1. //----------------------------------------------------------------------------
  2. // Mixing BC++ built 32-bit DLL's with non-BC applications.
  3. // Copyright (c) 1996 by Borland International, All Rights Reserved
  4. //----------------------------------------------------------------------------
  5. #include <windows.h>
  6. #define BCDLL_BLD
  7. #include "bcdll.h"
  8.  
  9. //
  10. // Display a message passed from the calling application
  11. //
  12. bool BCDLL_EXP __stdcall Message(const char * msg)
  13.    {
  14.    return MessageBox(NULL, msg, "Borland C++ DLL", MB_OK|MB_APPLMODAL);
  15.    }
  16.  
  17. //
  18. // Verify calling convention match
  19. //
  20. long BCDLL_EXP __cdecl Multiply(short s, int i)
  21.    {
  22.    return s * (long)i;
  23.    }
  24.  
  25. //
  26. // Verify compatible handling of real numbers
  27. //
  28. long double BCDLL_EXP __stdcall Average(double d, float f)
  29.    {
  30.    return (d + (long double) f) / 2;
  31.    }
  32.  
  33. //
  34. // Verify that handling exceptions within the DLL has no side effects on
  35. // the calling application.
  36. //
  37. void BCDLL_EXP __cdecl ExceptionTest()
  38.    {
  39.    bool handled = false;
  40.    char bfr [25];
  41.    try{
  42.       throw 1;
  43.       }
  44.    catch (int exCode)
  45.       {
  46.       handled = true;
  47.       }
  48.    wsprintf(bfr, "%s ExceptionTest", ((handled==true) ? "Passed" : "Failed"));
  49.    MessageBox(NULL, bfr, "Borland C++ DLL", MB_OK|MB_APPLMODAL);
  50.    }
  51.  
  52. //
  53. // Verify applications behavior if an exception is thrown in the DLL and allowed
  54. // to propagate beyond the scope of the DLL.
  55. //
  56. void BCDLL_EXP __stdcall UnhandledException()
  57.    {
  58.    throw "Exception message thrown from a Borland C++ DLL.";
  59.    }
  60.  
  61. ///////////////// The Visual Basic versions //////////////////////////////
  62. //
  63. // Visual Basic does not support Cdecl, so stdcall versions of Multiply and
  64. // ExceptionTest must be provided. Also, VB does not appear to have a type
  65. // equivalent to long double, so a version of Average is provided that returns a
  66. // double. For simplicity, the VB application will expect all exported functions
  67. // to have a VB prepended to the name, so we will export Message and
  68. // UnhandledException by alias in the Module Definition File.
  69. //
  70. long BCDLL_EXP __stdcall VBMultiply(short s, int i)
  71.    {
  72.    return s * (long)i;
  73.    }
  74.  
  75. double BCDLL_EXP __stdcall VBAverage(double d, float f)
  76.    {
  77.    return (d + f) / 2;
  78.    }
  79.  
  80. void BCDLL_EXP __stdcall VBExceptionTest()
  81.    {
  82.    bool handled = false;
  83.    char bfr [25];
  84.    try{
  85.       throw 1;
  86.       }
  87.    catch (int exCode)
  88.       {
  89.       handled = true;
  90.       }
  91.    wsprintf(bfr, "%s ExceptionTest", ((handled==true) ? "Passed" : "Failed"));
  92.    MessageBox(NULL, bfr, "Borland C++ DLL", MB_OK|MB_APPLMODAL);
  93.    }
  94.  
  95.